[INFO] cloning repository https://github.com/afescott/arbitrage_cex_calculator
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/afescott/arbitrage_cex_calculator" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fafescott%2Farbitrage_cex_calculator", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fafescott%2Farbitrage_cex_calculator'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 3152dc0ded1d7a70403ff9edafbdf83cac945c84
[INFO] testing afescott/arbitrage_cex_calculator against master#1f7f8ea0721a3b1eb73e6c6d25cccb371434b320 for pr-154065
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fafescott%2Farbitrage_cex_calculator" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/afescott/arbitrage_cex_calculator
[INFO] finished tweaking git repo https://github.com/afescott/arbitrage_cex_calculator
[INFO] tweaked toml for git repo https://github.com/afescott/arbitrage_cex_calculator written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/afescott/arbitrage_cex_calculator on toolchain 1f7f8ea0721a3b1eb73e6c6d25cccb371434b320
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/afescott/arbitrage_cex_calculator already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded ulid v1.2.1
[INFO] [stderr]   Downloaded pricelevel v0.4.2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 3c9cc4118ba0c7b090e18bccff59e72ce3565fa832fe1a49ce8577ad4b2b1ba9
[INFO] running `Command { std: "docker" "start" "-a" "3c9cc4118ba0c7b090e18bccff59e72ce3565fa832fe1a49ce8577ad4b2b1ba9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "3c9cc4118ba0c7b090e18bccff59e72ce3565fa832fe1a49ce8577ad4b2b1ba9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3c9cc4118ba0c7b090e18bccff59e72ce3565fa832fe1a49ce8577ad4b2b1ba9", kill_on_drop: false }`
[INFO] [stdout] 3c9cc4118ba0c7b090e18bccff59e72ce3565fa832fe1a49ce8577ad4b2b1ba9
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 4515a570a6ef2f29f92981c1c1ed4f3aa03c16c663a3e975e8f1f4c228091753
[INFO] running `Command { std: "docker" "start" "-a" "4515a570a6ef2f29f92981c1c1ed4f3aa03c16c663a3e975e8f1f4c228091753", kill_on_drop: false }`
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling openssl-sys v0.9.111
[INFO] [stderr]    Compiling bytes v1.11.0
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling regex-syntax v0.8.8
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling zmij v1.0.16
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]    Compiling native-tls v0.2.14
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling regex-automata v0.4.13
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling anyhow v1.0.100
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling futures-core v0.3.31
[INFO] [stderr]    Compiling sha1_smol v1.0.1
[INFO] [stderr]    Compiling data-encoding v2.10.0
[INFO] [stderr]    Compiling uuid v1.19.0
[INFO] [stderr]    Compiling crossbeam v0.8.4
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling dashmap v6.1.0
[INFO] [stderr]    Compiling iana-time-zone v0.1.64
[INFO] [stderr]    Compiling dashmap v5.5.3
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling tokio v1.49.0
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.22
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling ulid v1.2.1
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling pricelevel v0.4.2
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tungstenite v0.21.0
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling tokio-tungstenite v0.21.0
[INFO] [stderr]    Compiling security_flamegraph_lowlatency v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/binance.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/coinbase.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/hyperliquid.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/kraken.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArbitrageOpportunity`
[INFO] [stdout]  --> src/calculation/mod.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use arbitrage::{ArbitrageOpportunity, ArbitrageDetector};
[INFO] [stdout]   |                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ExchangeFee`, `FeeCalculator`, and `RoutePnlEstimate`
[INFO] [stdout]  --> src/calculation/mod.rs:5:16
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use fees::{ExchangeFee, FeeCalculator, RoutePnlEstimate};
[INFO] [stdout]   |                ^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crossbeam_queue::SegQueue`
[INFO] [stdout]   --> src/orderbook/book.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crossbeam_queue::SegQueue;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PriceLevel` and `UuidGenerator`
[INFO] [stdout]   --> src/orderbook/book.rs:16:27
[INFO] [stdout]    |
[INFO] [stdout] 16 | use pricelevel::{OrderId, PriceLevel, Side, UuidGenerator};
[INFO] [stdout]    |                           ^^^^^^^^^^        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `uuid::Uuid`
[INFO] [stdout]   --> src/orderbook/book.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crossbeam_queue::SegQueue`
[INFO] [stdout]   --> src/orderbook/modifications.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crossbeam_queue::SegQueue;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/orderbook/modifications.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Context`, `Result`, and `anyhow`
[INFO] [stdout]   --> src/orderbook/modifications.rs:19:14
[INFO] [stdout]    |
[INFO] [stdout] 19 | use anyhow::{anyhow, Context, Result};
[INFO] [stdout]    |              ^^^^^^  ^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `OrderId`, `OrderType`, `OrderUpdate`, `PriceLevel`, and `Side`
[INFO] [stdout]   --> src/orderbook/modifications.rs:20:18
[INFO] [stdout]    |
[INFO] [stdout] 20 | use pricelevel::{OrderId, OrderType, OrderUpdate, PriceLevel, Side};
[INFO] [stdout]    |                  ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::atomic::Ordering`
[INFO] [stdout]   --> src/orderbook/modifications.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::sync::atomic::Ordering;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info` and `trace`
[INFO] [stdout]   --> src/orderbook/modifications.rs:22:15
[INFO] [stdout]    |
[INFO] [stdout] 22 | use tracing::{info, trace};
[INFO] [stdout]    |               ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::book::OrderBook`
[INFO] [stdout]   --> src/orderbook/modifications.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use super::book::OrderBook;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `modifications::OrderModification`
[INFO] [stdout]   --> src/orderbook/mod.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use modifications::OrderModification;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/main.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{info, Level};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/api/binance.rs:2:20
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/binance.rs:31:40
[INFO] [stdout]    |
[INFO] [stdout] 31 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/binance.rs:35:42
[INFO] [stdout]    |
[INFO] [stdout] 35 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/binance.rs:42:29
[INFO] [stdout]    |
[INFO] [stdout] 42 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/binance.rs:50:17
[INFO] [stdout]    |
[INFO] [stdout] 50 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:33:28
[INFO] [stdout]    |
[INFO] [stdout] 33 |                 if let Err(e) = ws_stream.send(Message::Text(subscribe_msg.to_string())).await {
[INFO] [stdout]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:45:40
[INFO] [stdout]    |
[INFO] [stdout] 45 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/coinbase.rs:49:42
[INFO] [stdout]    |
[INFO] [stdout] 49 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:56:29
[INFO] [stdout]    |
[INFO] [stdout] 56 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:64:17
[INFO] [stdout]    |
[INFO] [stdout] 64 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:37:28
[INFO] [stdout]    |
[INFO] [stdout] 37 |                 if let Err(e) = ws_stream
[INFO] [stdout]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:52:40
[INFO] [stdout]    |
[INFO] [stdout] 52 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/hyperliquid.rs:56:42
[INFO] [stdout]    |
[INFO] [stdout] 56 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:63:29
[INFO] [stdout]    |
[INFO] [stdout] 63 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:71:17
[INFO] [stdout]    |
[INFO] [stdout] 71 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:35:28
[INFO] [stdout]    |
[INFO] [stdout] 35 |                 if let Err(e) = ws_stream
[INFO] [stdout]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:50:40
[INFO] [stdout]    |
[INFO] [stdout] 50 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/kraken.rs:54:42
[INFO] [stdout]    |
[INFO] [stdout] 54 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:61:29
[INFO] [stdout]    |
[INFO] [stdout] 61 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:69:17
[INFO] [stdout]    |
[INFO] [stdout] 69 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event`
[INFO] [stdout]   --> src/api/kraken.rs:89:21
[INFO] [stdout]    |
[INFO] [stdout] 89 |         if let Some(event) = value.get("event").and_then(|e| e.as_str()) {
[INFO] [stdout]    |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_event`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `book_data`
[INFO] [stdout]    --> src/api/kraken.rs:104:33
[INFO] [stdout]     |
[INFO] [stdout] 104 |                     if let Some(book_data) = array[1].as_object() {
[INFO] [stdout]     |                                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_book_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `exchange_ts`
[INFO] [stdout]    --> src/api/mod.rs:132:13
[INFO] [stdout]     |
[INFO] [stdout] 132 |         let exchange_ts = self.exchange_timestamp()?;
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exchange_ts`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `gross_profit`
[INFO] [stdout]    --> src/calculation/arbitrage.rs:232:46
[INFO] [stdout]     |
[INFO] [stdout] 232 |     fn is_profitable(&self, net_profit: u64, gross_profit: u64, base_price: u64) -> bool {
[INFO] [stdout]     |                                              ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_gross_profit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bias`
[INFO] [stdout]   --> src/main.rs:32:39
[INFO] [stdout]    |
[INFO] [stdout] 32 | async fn run(order_book_name: String, bias: Bias) {
[INFO] [stdout]    |                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_bias`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `purchase_handle`
[INFO] [stdout]   --> src/main.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |     let purchase_handle = tokio::spawn(async move {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_purchase_handle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PriceUpdate` is never constructed
[INFO] [stdout]   --> src/api/mod.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct PriceUpdate {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Exchange` is never used
[INFO] [stdout]   --> src/api/mod.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum Exchange {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `price`, `quantity`, `exchange`, `side`, and `network_latency_ms` are never used
[INFO] [stdout]    --> src/api/mod.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  66 | impl ExchangePrice {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout]  67 |     pub fn price(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn quantity(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn exchange(&self) -> Exchange {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn side(&self) -> Side {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn network_latency_ms(&self) -> Option<u64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExecutionTuning` is never constructed
[INFO] [stdout]   --> src/args.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ExecutionTuning {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hyperliquid_private_key`, `kraken_api_key`, `kraken_api_secret`, `binance_api_key`, `binance_api_secret`, and `budget` are never read
[INFO] [stdout]   --> src/args.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct Args {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub hyperliquid_private_key: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub kraken_api_key: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 37 |     pub kraken_api_secret: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub binance_api_key: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 41 |     pub binance_api_secret: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub budget: u64,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execution_tuning` is never used
[INFO] [stdout]    --> src/args.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout]  48 | impl Args {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn execution_tuning(&self) -> ExecutionTuning {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `gross_profit_cents`, `detected_at`, and `age_ms` are never read
[INFO] [stdout]   --> src/calculation/arbitrage.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct ArbitrageOpportunity {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub gross_profit_cents: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub detected_at: Instant,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 23 |     /// Age of the opportunity in milliseconds (for staleness checks)
[INFO] [stdout] 24 |     pub age_ms: u64,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ArbitrageOpportunity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_stale` is never used
[INFO] [stdout]   --> src/calculation/arbitrage.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl ArbitrageOpportunity {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn is_stale(&self, max_age_ms: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_age_ms` is never read
[INFO] [stdout]   --> src/calculation/arbitrage.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub struct ArbitrageDetector {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 73 |     max_age_ms: u64,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_opportunity_stale` is never used
[INFO] [stdout]    --> src/calculation/arbitrage.rs:250:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl ArbitrageDetector {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn is_opportunity_stale(&self, opportunity: &ArbitrageOpportunity) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `maker_bps` is never read
[INFO] [stdout]  --> src/calculation/fees.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ExchangeFee {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 7 |     pub maker_bps: u64, // Maker fee in basis points
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ExchangeFee` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RoutePnlEstimate` is never constructed
[INFO] [stdout]   --> src/calculation/fees.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct RoutePnlEstimate {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `exchange_type_price` and `others` are never read
[INFO] [stdout]   --> src/calculation/fees.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct PurchaseOption {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 37 |     exchange_type_price: (Exchange, u64),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 38 |     others: [Exchange; 2],
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rx` is never read
[INFO] [stdout]   --> src/calculation/fees.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct FeeCalculator {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 44 |     rx: tokio::sync::mpsc::Receiver<PurchaseOption>,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `calculate_order_fee`, `round_trip_taker_bps`, `min_break_even_spread_bps`, and `estimate_round_trip_pnl` are never used
[INFO] [stdout]    --> src/calculation/fees.rs:91:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl FeeCalculator {
[INFO] [stdout]     | ------------------ associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn calculate_order_fee(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn round_trip_taker_bps(buy_exchange: Exchange, sell_exchange: Exchange) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn min_break_even_spread_bps(buy_exchange: Exchange, sell_exchange: Exchange) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn estimate_round_trip_pnl(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FillResponse` is never used
[INFO] [stdout]    --> src/orderbook/mod.rs:115:10
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub enum FillResponse {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `current_time_millis` is never used
[INFO] [stdout]    --> src/orderbook/mod.rs:121:8
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub fn current_time_millis() -> u64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FillType` is never used
[INFO] [stdout]   --> src/orderbook/book.rs:26:10
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub enum FillType {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `symbol` is never read
[INFO] [stdout]   --> src/orderbook/book.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct OrderBook {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 53 |     /// The symbol or identifier for this order book
[INFO] [stdout] 54 |     pub symbol: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `best_bid` and `best_ask` are never used
[INFO] [stdout]    --> src/orderbook/book.rs:96:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl OrderBook {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn best_bid(&self, exchange: Exchange) -> Option<(u64, u64)> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn best_ask(&self, exchange: Exchange) -> Option<(u64, u64)> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `OrderModification` is never used
[INFO] [stdout]   --> src/orderbook/modifications.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum OrderModification {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 18s
[INFO] running `Command { std: "docker" "inspect" "4515a570a6ef2f29f92981c1c1ed4f3aa03c16c663a3e975e8f1f4c228091753", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4515a570a6ef2f29f92981c1c1ed4f3aa03c16c663a3e975e8f1f4c228091753", kill_on_drop: false }`
[INFO] [stdout] 4515a570a6ef2f29f92981c1c1ed4f3aa03c16c663a3e975e8f1f4c228091753
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] a6d7058e50855239f26bba01267041b45669ca58a9e18c56f96ea01130b182b2
[INFO] running `Command { std: "docker" "start" "-a" "a6d7058e50855239f26bba01267041b45669ca58a9e18c56f96ea01130b182b2", kill_on_drop: false }`
[INFO] [stderr]    Compiling security_flamegraph_lowlatency v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/binance.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/coinbase.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/hyperliquid.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stdout]  --> src/api/kraken.rs:5:15
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing::{error, info, warn};
[INFO] [stdout]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ArbitrageOpportunity`
[INFO] [stdout]  --> src/calculation/mod.rs:4:21
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub use arbitrage::{ArbitrageOpportunity, ArbitrageDetector};
[INFO] [stdout]   |                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ExchangeFee`, `FeeCalculator`, and `RoutePnlEstimate`
[INFO] [stdout]  --> src/calculation/mod.rs:5:16
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub use fees::{ExchangeFee, FeeCalculator, RoutePnlEstimate};
[INFO] [stdout]   |                ^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crossbeam_queue::SegQueue`
[INFO] [stdout]   --> src/orderbook/book.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crossbeam_queue::SegQueue;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `PriceLevel` and `UuidGenerator`
[INFO] [stdout]   --> src/orderbook/book.rs:16:27
[INFO] [stdout]    |
[INFO] [stdout] 16 | use pricelevel::{OrderId, PriceLevel, Side, UuidGenerator};
[INFO] [stdout]    |                           ^^^^^^^^^^        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `uuid::Uuid`
[INFO] [stdout]   --> src/orderbook/book.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `time::Duration`
[INFO] [stdout]    --> src/orderbook/book.rs:333:26
[INFO] [stdout]     |
[INFO] [stdout] 333 |     use std::{sync::Arc, time::Duration};
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::channel`
[INFO] [stdout]    --> src/orderbook/book.rs:336:9
[INFO] [stdout]     |
[INFO] [stdout] 336 |     use tokio::sync::mpsc::channel;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crossbeam_queue::SegQueue`
[INFO] [stdout]   --> src/orderbook/modifications.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crossbeam_queue::SegQueue;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/orderbook/modifications.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Context`, `Result`, and `anyhow`
[INFO] [stdout]   --> src/orderbook/modifications.rs:19:14
[INFO] [stdout]    |
[INFO] [stdout] 19 | use anyhow::{anyhow, Context, Result};
[INFO] [stdout]    |              ^^^^^^  ^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `OrderId`, `OrderType`, `OrderUpdate`, `PriceLevel`, and `Side`
[INFO] [stdout]   --> src/orderbook/modifications.rs:20:18
[INFO] [stdout]    |
[INFO] [stdout] 20 | use pricelevel::{OrderId, OrderType, OrderUpdate, PriceLevel, Side};
[INFO] [stdout]    |                  ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::atomic::Ordering`
[INFO] [stdout]   --> src/orderbook/modifications.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::sync::atomic::Ordering;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `info` and `trace`
[INFO] [stdout]   --> src/orderbook/modifications.rs:22:15
[INFO] [stdout]    |
[INFO] [stdout] 22 | use tracing::{info, trace};
[INFO] [stdout]    |               ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::book::OrderBook`
[INFO] [stdout]   --> src/orderbook/modifications.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use super::book::OrderBook;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `modifications::OrderModification`
[INFO] [stdout]   --> src/orderbook/mod.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use modifications::OrderModification;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `info`
[INFO] [stdout]  --> src/main.rs:8:15
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tracing::{info, Level};
[INFO] [stdout]   |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/api/binance.rs:2:20
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures_util::{SinkExt, StreamExt};
[INFO] [stdout]   |                    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/binance.rs:31:40
[INFO] [stdout]    |
[INFO] [stdout] 31 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/binance.rs:35:42
[INFO] [stdout]    |
[INFO] [stdout] 35 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/binance.rs:42:29
[INFO] [stdout]    |
[INFO] [stdout] 42 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/binance.rs:50:17
[INFO] [stdout]    |
[INFO] [stdout] 50 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:33:28
[INFO] [stdout]    |
[INFO] [stdout] 33 |                 if let Err(e) = ws_stream.send(Message::Text(subscribe_msg.to_string())).await {
[INFO] [stdout]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:45:40
[INFO] [stdout]    |
[INFO] [stdout] 45 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/coinbase.rs:49:42
[INFO] [stdout]    |
[INFO] [stdout] 49 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:56:29
[INFO] [stdout]    |
[INFO] [stdout] 56 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/coinbase.rs:64:17
[INFO] [stdout]    |
[INFO] [stdout] 64 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:37:28
[INFO] [stdout]    |
[INFO] [stdout] 37 |                 if let Err(e) = ws_stream
[INFO] [stdout]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:52:40
[INFO] [stdout]    |
[INFO] [stdout] 52 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/hyperliquid.rs:56:42
[INFO] [stdout]    |
[INFO] [stdout] 56 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:63:29
[INFO] [stdout]    |
[INFO] [stdout] 63 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/hyperliquid.rs:71:17
[INFO] [stdout]    |
[INFO] [stdout] 71 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:35:28
[INFO] [stdout]    |
[INFO] [stdout] 35 |                 if let Err(e) = ws_stream
[INFO] [stdout]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:50:40
[INFO] [stdout]    |
[INFO] [stdout] 50 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stdout]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/api/kraken.rs:54:42
[INFO] [stdout]    |
[INFO] [stdout] 54 |                         Ok(Message::Ping(data)) => {
[INFO] [stdout]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:61:29
[INFO] [stdout]    |
[INFO] [stdout] 61 |                         Err(e) => {
[INFO] [stdout]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/api/kraken.rs:69:17
[INFO] [stdout]    |
[INFO] [stdout] 69 |             Err(e) => {
[INFO] [stdout]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `event`
[INFO] [stdout]   --> src/api/kraken.rs:89:21
[INFO] [stdout]    |
[INFO] [stdout] 89 |         if let Some(event) = value.get("event").and_then(|e| e.as_str()) {
[INFO] [stdout]    |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_event`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `book_data`
[INFO] [stdout]    --> src/api/kraken.rs:104:33
[INFO] [stdout]     |
[INFO] [stdout] 104 |                     if let Some(book_data) = array[1].as_object() {
[INFO] [stdout]     |                                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_book_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `exchange_ts`
[INFO] [stdout]    --> src/api/mod.rs:132:13
[INFO] [stdout]     |
[INFO] [stdout] 132 |         let exchange_ts = self.exchange_timestamp()?;
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exchange_ts`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `gross_profit`
[INFO] [stdout]    --> src/calculation/arbitrage.rs:232:46
[INFO] [stdout]     |
[INFO] [stdout] 232 |     fn is_profitable(&self, net_profit: u64, gross_profit: u64, base_price: u64) -> bool {
[INFO] [stdout]     |                                              ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_gross_profit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fees`
[INFO] [stdout]    --> src/calculation/fees.rs:167:13
[INFO] [stdout]     |
[INFO] [stdout] 167 |         let fees = FeeCalculator::calculate_total_fees(
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_fees`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bias`
[INFO] [stdout]   --> src/main.rs:32:39
[INFO] [stdout]    |
[INFO] [stdout] 32 | async fn run(order_book_name: String, bias: Bias) {
[INFO] [stdout]    |                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_bias`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `purchase_handle`
[INFO] [stdout]   --> src/main.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |     let purchase_handle = tokio::spawn(async move {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_purchase_handle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PriceUpdate` is never constructed
[INFO] [stdout]   --> src/api/mod.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct PriceUpdate {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Exchange` is never used
[INFO] [stdout]   --> src/api/mod.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum Exchange {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `price`, `quantity`, `exchange`, `side`, and `network_latency_ms` are never used
[INFO] [stdout]    --> src/api/mod.rs:67:12
[INFO] [stdout]     |
[INFO] [stdout]  66 | impl ExchangePrice {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout]  67 |     pub fn price(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  76 |     pub fn quantity(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn exchange(&self) -> Exchange {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn side(&self) -> Side {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn network_latency_ms(&self) -> Option<u64> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExecutionTuning` is never constructed
[INFO] [stdout]   --> src/args.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct ExecutionTuning {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `hyperliquid_private_key`, `kraken_api_key`, `kraken_api_secret`, `binance_api_key`, `binance_api_secret`, and `budget` are never read
[INFO] [stdout]   --> src/args.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct Args {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub hyperliquid_private_key: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub kraken_api_key: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 37 |     pub kraken_api_secret: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub binance_api_key: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 41 |     pub binance_api_secret: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub budget: u64,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `execution_tuning` is never used
[INFO] [stdout]    --> src/args.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout]  48 | impl Args {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn execution_tuning(&self) -> ExecutionTuning {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `gross_profit_cents`, `detected_at`, and `age_ms` are never read
[INFO] [stdout]   --> src/calculation/arbitrage.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct ArbitrageOpportunity {
[INFO] [stdout]    |            -------------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub gross_profit_cents: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub detected_at: Instant,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 23 |     /// Age of the opportunity in milliseconds (for staleness checks)
[INFO] [stdout] 24 |     pub age_ms: u64,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ArbitrageOpportunity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_stale` is never used
[INFO] [stdout]   --> src/calculation/arbitrage.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl ArbitrageOpportunity {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn is_stale(&self, max_age_ms: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_age_ms` is never read
[INFO] [stdout]   --> src/calculation/arbitrage.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub struct ArbitrageDetector {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 73 |     max_age_ms: u64,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_opportunity_stale` is never used
[INFO] [stdout]    --> src/calculation/arbitrage.rs:250:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl ArbitrageDetector {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn is_opportunity_stale(&self, opportunity: &ArbitrageOpportunity) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `maker_bps` is never read
[INFO] [stdout]  --> src/calculation/fees.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct ExchangeFee {
[INFO] [stdout]   |            ----------- field in this struct
[INFO] [stdout] 7 |     pub maker_bps: u64, // Maker fee in basis points
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ExchangeFee` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `exchange_type_price` and `others` are never read
[INFO] [stdout]   --> src/calculation/fees.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct PurchaseOption {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 37 |     exchange_type_price: (Exchange, u64),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 38 |     others: [Exchange; 2],
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rx` is never read
[INFO] [stdout]   --> src/calculation/fees.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct FeeCalculator {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 44 |     rx: tokio::sync::mpsc::Receiver<PurchaseOption>,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `calculate_order_fee` is never used
[INFO] [stdout]   --> src/calculation/fees.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | impl FeeCalculator {
[INFO] [stdout]    | ------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn calculate_order_fee(
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FillResponse` is never used
[INFO] [stdout]    --> src/orderbook/mod.rs:115:10
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub enum FillResponse {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `current_time_millis` is never used
[INFO] [stdout]    --> src/orderbook/mod.rs:121:8
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub fn current_time_millis() -> u64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FillType` is never used
[INFO] [stdout]   --> src/orderbook/book.rs:26:10
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub enum FillType {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `symbol` is never read
[INFO] [stdout]   --> src/orderbook/book.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct OrderBook {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 53 |     /// The symbol or identifier for this order book
[INFO] [stdout] 54 |     pub symbol: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `best_bid` and `best_ask` are never used
[INFO] [stdout]    --> src/orderbook/book.rs:96:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl OrderBook {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn best_bid(&self, exchange: Exchange) -> Option<(u64, u64)> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn best_ask(&self, exchange: Exchange) -> Option<(u64, u64)> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `OrderModification` is never used
[INFO] [stdout]   --> src/orderbook/modifications.rs:27:10
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub enum OrderModification {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/orderbook/book.rs:439:9
[INFO] [stdout]     |
[INFO] [stdout] 439 |         tokio::join!(task_1, task_2);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/orderbook/book.rs:439:9
[INFO] [stdout]     |
[INFO] [stdout] 439 |         tokio::join!(task_1, task_2);
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 2.45s
[INFO] running `Command { std: "docker" "inspect" "a6d7058e50855239f26bba01267041b45669ca58a9e18c56f96ea01130b182b2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a6d7058e50855239f26bba01267041b45669ca58a9e18c56f96ea01130b182b2", kill_on_drop: false }`
[INFO] [stdout] a6d7058e50855239f26bba01267041b45669ca58a9e18c56f96ea01130b182b2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] eee3f1eecd2d27b990f2b8867a65e4aa1c735fc3331e2ce6ccce4a45e81eecbd
[INFO] running `Command { std: "docker" "start" "-a" "eee3f1eecd2d27b990f2b8867a65e4aa1c735fc3331e2ce6ccce4a45e81eecbd", kill_on_drop: false }`
[INFO] [stderr] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stderr]  --> src/api/binance.rs:5:15
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tracing::{error, info, warn};
[INFO] [stderr]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stderr]  --> src/api/coinbase.rs:5:15
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tracing::{error, info, warn};
[INFO] [stderr]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stderr]  --> src/api/hyperliquid.rs:5:15
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tracing::{error, info, warn};
[INFO] [stderr]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `error`, `info`, and `warn`
[INFO] [stderr]  --> src/api/kraken.rs:5:15
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tracing::{error, info, warn};
[INFO] [stderr]   |               ^^^^^  ^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ArbitrageOpportunity`
[INFO] [stderr]  --> src/calculation/mod.rs:4:21
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub use arbitrage::{ArbitrageOpportunity, ArbitrageDetector};
[INFO] [stderr]   |                     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ExchangeFee`, `FeeCalculator`, and `RoutePnlEstimate`
[INFO] [stderr]  --> src/calculation/mod.rs:5:16
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub use fees::{ExchangeFee, FeeCalculator, RoutePnlEstimate};
[INFO] [stderr]   |                ^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crossbeam_queue::SegQueue`
[INFO] [stderr]   --> src/orderbook/book.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr] 14 | use crossbeam_queue::SegQueue;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `PriceLevel` and `UuidGenerator`
[INFO] [stderr]   --> src/orderbook/book.rs:16:27
[INFO] [stderr]    |
[INFO] [stderr] 16 | use pricelevel::{OrderId, PriceLevel, Side, UuidGenerator};
[INFO] [stderr]    |                           ^^^^^^^^^^        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `uuid::Uuid`
[INFO] [stderr]   --> src/orderbook/book.rs:21:5
[INFO] [stderr]    |
[INFO] [stderr] 21 | use uuid::Uuid;
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `time::Duration`
[INFO] [stderr]    --> src/orderbook/book.rs:333:26
[INFO] [stderr]     |
[INFO] [stderr] 333 |     use std::{sync::Arc, time::Duration};
[INFO] [stderr]     |                          ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::channel`
[INFO] [stderr]    --> src/orderbook/book.rs:336:9
[INFO] [stderr]     |
[INFO] [stderr] 336 |     use tokio::sync::mpsc::channel;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crossbeam_queue::SegQueue`
[INFO] [stderr]   --> src/orderbook/modifications.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr] 14 | use crossbeam_queue::SegQueue;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::Arc`
[INFO] [stderr]   --> src/orderbook/modifications.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | use std::sync::Arc;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Context`, `Result`, and `anyhow`
[INFO] [stderr]   --> src/orderbook/modifications.rs:19:14
[INFO] [stderr]    |
[INFO] [stderr] 19 | use anyhow::{anyhow, Context, Result};
[INFO] [stderr]    |              ^^^^^^  ^^^^^^^  ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `OrderId`, `OrderType`, `OrderUpdate`, `PriceLevel`, and `Side`
[INFO] [stderr]   --> src/orderbook/modifications.rs:20:18
[INFO] [stderr]    |
[INFO] [stderr] 20 | use pricelevel::{OrderId, OrderType, OrderUpdate, PriceLevel, Side};
[INFO] [stderr]    |                  ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::atomic::Ordering`
[INFO] [stderr]   --> src/orderbook/modifications.rs:21:5
[INFO] [stderr]    |
[INFO] [stderr] 21 | use std::sync::atomic::Ordering;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `info` and `trace`
[INFO] [stderr]   --> src/orderbook/modifications.rs:22:15
[INFO] [stderr]    |
[INFO] [stderr] 22 | use tracing::{info, trace};
[INFO] [stderr]    |               ^^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `super::book::OrderBook`
[INFO] [stderr]   --> src/orderbook/modifications.rs:24:5
[INFO] [stderr]    |
[INFO] [stderr] 24 | use super::book::OrderBook;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `modifications::OrderModification`
[INFO] [stderr]   --> src/orderbook/mod.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub use modifications::OrderModification;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `info`
[INFO] [stderr]  --> src/main.rs:8:15
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tracing::{info, Level};
[INFO] [stderr]   |               ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `SinkExt`
[INFO] [stderr]  --> src/api/binance.rs:2:20
[INFO] [stderr]   |
[INFO] [stderr] 2 | use futures_util::{SinkExt, StreamExt};
[INFO] [stderr]   |                    ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/binance.rs:31:40
[INFO] [stderr]    |
[INFO] [stderr] 31 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stderr]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `data`
[INFO] [stderr]   --> src/api/binance.rs:35:42
[INFO] [stderr]    |
[INFO] [stderr] 35 |                         Ok(Message::Ping(data)) => {
[INFO] [stderr]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/binance.rs:42:29
[INFO] [stderr]    |
[INFO] [stderr] 42 |                         Err(e) => {
[INFO] [stderr]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/binance.rs:50:17
[INFO] [stderr]    |
[INFO] [stderr] 50 |             Err(e) => {
[INFO] [stderr]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/coinbase.rs:33:28
[INFO] [stderr]    |
[INFO] [stderr] 33 |                 if let Err(e) = ws_stream.send(Message::Text(subscribe_msg.to_string())).await {
[INFO] [stderr]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/coinbase.rs:45:40
[INFO] [stderr]    |
[INFO] [stderr] 45 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stderr]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `data`
[INFO] [stderr]   --> src/api/coinbase.rs:49:42
[INFO] [stderr]    |
[INFO] [stderr] 49 |                         Ok(Message::Ping(data)) => {
[INFO] [stderr]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/coinbase.rs:56:29
[INFO] [stderr]    |
[INFO] [stderr] 56 |                         Err(e) => {
[INFO] [stderr]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/coinbase.rs:64:17
[INFO] [stderr]    |
[INFO] [stderr] 64 |             Err(e) => {
[INFO] [stderr]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/hyperliquid.rs:37:28
[INFO] [stderr]    |
[INFO] [stderr] 37 |                 if let Err(e) = ws_stream
[INFO] [stderr]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/hyperliquid.rs:52:40
[INFO] [stderr]    |
[INFO] [stderr] 52 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stderr]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `data`
[INFO] [stderr]   --> src/api/hyperliquid.rs:56:42
[INFO] [stderr]    |
[INFO] [stderr] 56 |                         Ok(Message::Ping(data)) => {
[INFO] [stderr]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/hyperliquid.rs:63:29
[INFO] [stderr]    |
[INFO] [stderr] 63 |                         Err(e) => {
[INFO] [stderr]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/hyperliquid.rs:71:17
[INFO] [stderr]    |
[INFO] [stderr] 71 |             Err(e) => {
[INFO] [stderr]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/kraken.rs:35:28
[INFO] [stderr]    |
[INFO] [stderr] 35 |                 if let Err(e) = ws_stream
[INFO] [stderr]    |                            ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/kraken.rs:50:40
[INFO] [stderr]    |
[INFO] [stderr] 50 | ...                   if let Err(e) = self.handle_message(&text, received_at).await {
[INFO] [stderr]    |                                  ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `data`
[INFO] [stderr]   --> src/api/kraken.rs:54:42
[INFO] [stderr]    |
[INFO] [stderr] 54 |                         Ok(Message::Ping(data)) => {
[INFO] [stderr]    |                                          ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/kraken.rs:61:29
[INFO] [stderr]    |
[INFO] [stderr] 61 |                         Err(e) => {
[INFO] [stderr]    |                             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]   --> src/api/kraken.rs:69:17
[INFO] [stderr]    |
[INFO] [stderr] 69 |             Err(e) => {
[INFO] [stderr]    |                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `event`
[INFO] [stderr]   --> src/api/kraken.rs:89:21
[INFO] [stderr]    |
[INFO] [stderr] 89 |         if let Some(event) = value.get("event").and_then(|e| e.as_str()) {
[INFO] [stderr]    |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_event`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `book_data`
[INFO] [stderr]    --> src/api/kraken.rs:104:33
[INFO] [stderr]     |
[INFO] [stderr] 104 |                     if let Some(book_data) = array[1].as_object() {
[INFO] [stderr]     |                                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_book_data`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `exchange_ts`
[INFO] [stderr]    --> src/api/mod.rs:132:13
[INFO] [stderr]     |
[INFO] [stderr] 132 |         let exchange_ts = self.exchange_timestamp()?;
[INFO] [stderr]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_exchange_ts`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `gross_profit`
[INFO] [stderr]    --> src/calculation/arbitrage.rs:232:46
[INFO] [stderr]     |
[INFO] [stderr] 232 |     fn is_profitable(&self, net_profit: u64, gross_profit: u64, base_price: u64) -> bool {
[INFO] [stderr]     |                                              ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_gross_profit`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `fees`
[INFO] [stderr]    --> src/calculation/fees.rs:167:13
[INFO] [stderr]     |
[INFO] [stderr] 167 |         let fees = FeeCalculator::calculate_total_fees(
[INFO] [stderr]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_fees`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `bias`
[INFO] [stderr]   --> src/main.rs:32:39
[INFO] [stderr]    |
[INFO] [stderr] 32 | async fn run(order_book_name: String, bias: Bias) {
[INFO] [stderr]    |                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_bias`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `purchase_handle`
[INFO] [stderr]   --> src/main.rs:69:9
[INFO] [stderr]    |
[INFO] [stderr] 69 |     let purchase_handle = tokio::spawn(async move {
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_purchase_handle`
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PriceUpdate` is never constructed
[INFO] [stderr]   --> src/api/mod.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct PriceUpdate {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: enum `Exchange` is never used
[INFO] [stderr]   --> src/api/mod.rs:19:10
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub enum Exchange {
[INFO] [stderr]    |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `price`, `quantity`, `exchange`, `side`, and `network_latency_ms` are never used
[INFO] [stderr]    --> src/api/mod.rs:67:12
[INFO] [stderr]     |
[INFO] [stderr]  66 | impl ExchangePrice {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr]  67 |     pub fn price(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  76 |     pub fn quantity(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 111 |     pub fn exchange(&self) -> Exchange {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 120 |     pub fn side(&self) -> Side {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 131 |     pub fn network_latency_ms(&self) -> Option<u64> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ExecutionTuning` is never constructed
[INFO] [stderr]   --> src/args.rs:10:12
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub struct ExecutionTuning {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `hyperliquid_private_key`, `kraken_api_key`, `kraken_api_secret`, `binance_api_key`, `binance_api_secret`, and `budget` are never read
[INFO] [stderr]   --> src/args.rs:33:9
[INFO] [stderr]    |
[INFO] [stderr] 29 | pub struct Args {
[INFO] [stderr]    |            ---- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 33 |     pub hyperliquid_private_key: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 36 |     pub kraken_api_key: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 37 |     pub kraken_api_secret: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 40 |     pub binance_api_key: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 41 |     pub binance_api_secret: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     pub budget: u64,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Args` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `execution_tuning` is never used
[INFO] [stderr]    --> src/args.rs:114:12
[INFO] [stderr]     |
[INFO] [stderr]  48 | impl Args {
[INFO] [stderr]     | --------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 114 |     pub fn execution_tuning(&self) -> ExecutionTuning {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `gross_profit_cents`, `detected_at`, and `age_ms` are never read
[INFO] [stderr]   --> src/calculation/arbitrage.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr]  6 | pub struct ArbitrageOpportunity {
[INFO] [stderr]    |            -------------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 18 |     pub gross_profit_cents: u64,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 22 |     pub detected_at: Instant,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 23 |     /// Age of the opportunity in milliseconds (for staleness checks)
[INFO] [stderr] 24 |     pub age_ms: u64,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ArbitrageOpportunity` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_stale` is never used
[INFO] [stderr]   --> src/calculation/arbitrage.rs:61:12
[INFO] [stderr]    |
[INFO] [stderr] 27 | impl ArbitrageOpportunity {
[INFO] [stderr]    | ------------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 61 |     pub fn is_stale(&self, max_age_ms: u64) -> bool {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `max_age_ms` is never read
[INFO] [stderr]   --> src/calculation/arbitrage.rs:73:5
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub struct ArbitrageDetector {
[INFO] [stderr]    |            ----------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 73 |     max_age_ms: u64,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_opportunity_stale` is never used
[INFO] [stderr]    --> src/calculation/arbitrage.rs:250:12
[INFO] [stderr]     |
[INFO] [stderr]  76 | impl ArbitrageDetector {
[INFO] [stderr]     | ---------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 250 |     pub fn is_opportunity_stale(&self, opportunity: &ArbitrageOpportunity) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `maker_bps` is never read
[INFO] [stderr]  --> src/calculation/fees.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub struct ExchangeFee {
[INFO] [stderr]   |            ----------- field in this struct
[INFO] [stderr] 7 |     pub maker_bps: u64, // Maker fee in basis points
[INFO] [stderr]   |         ^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `ExchangeFee` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `exchange_type_price` and `others` are never read
[INFO] [stderr]   --> src/calculation/fees.rs:37:5
[INFO] [stderr]    |
[INFO] [stderr] 36 | pub struct PurchaseOption {
[INFO] [stderr]    |            -------------- fields in this struct
[INFO] [stderr] 37 |     exchange_type_price: (Exchange, u64),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 38 |     others: [Exchange; 2],
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `rx` is never read
[INFO] [stderr]   --> src/calculation/fees.rs:44:5
[INFO] [stderr]    |
[INFO] [stderr] 43 | pub struct FeeCalculator {
[INFO] [stderr]    |            ------------- field in this struct
[INFO] [stderr] 44 |     rx: tokio::sync::mpsc::Receiver<PurchaseOption>,
[INFO] [stderr]    |     ^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `calculate_order_fee` is never used
[INFO] [stderr]   --> src/calculation/fees.rs:91:12
[INFO] [stderr]    |
[INFO] [stderr] 47 | impl FeeCalculator {
[INFO] [stderr]    | ------------------ associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 91 |     pub fn calculate_order_fee(
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `FillResponse` is never used
[INFO] [stderr]    --> src/orderbook/mod.rs:115:10
[INFO] [stderr]     |
[INFO] [stderr] 115 | pub enum FillResponse {
[INFO] [stderr]     |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `current_time_millis` is never used
[INFO] [stderr]    --> src/orderbook/mod.rs:121:8
[INFO] [stderr]     |
[INFO] [stderr] 121 | pub fn current_time_millis() -> u64 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `FillType` is never used
[INFO] [stderr]   --> src/orderbook/book.rs:26:10
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub enum FillType {
[INFO] [stderr]    |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `symbol` is never read
[INFO] [stderr]   --> src/orderbook/book.rs:54:9
[INFO] [stderr]    |
[INFO] [stderr] 52 | pub struct OrderBook {
[INFO] [stderr]    |            --------- field in this struct
[INFO] [stderr] 53 |     /// The symbol or identifier for this order book
[INFO] [stderr] 54 |     pub symbol: String,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `best_bid` and `best_ask` are never used
[INFO] [stderr]    --> src/orderbook/book.rs:96:12
[INFO] [stderr]     |
[INFO] [stderr]  76 | impl OrderBook {
[INFO] [stderr]     | -------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  96 |     pub fn best_bid(&self, exchange: Exchange) -> Option<(u64, u64)> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub fn best_ask(&self, exchange: Exchange) -> Option<(u64, u64)> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `OrderModification` is never used
[INFO] [stderr]   --> src/orderbook/modifications.rs:27:10
[INFO] [stderr]    |
[INFO] [stderr] 27 | pub enum OrderModification {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stderr]    --> src/orderbook/book.rs:439:9
[INFO] [stderr]     |
[INFO] [stderr] 439 |         tokio::join!(task_1, task_2);
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stderr]    --> src/orderbook/book.rs:439:9
[INFO] [stderr]     |
[INFO] [stderr] 439 |         tokio::join!(task_1, task_2);
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] 
[INFO] [stderr] warning: `security_flamegraph_lowlatency` (bin "security_flamegraph_lowlatency" test) generated 69 warnings (run `cargo fix --bin "security_flamegraph_lowlatency" -p security_flamegraph_lowlatency --tests` to apply 46 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.18s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/security_flamegraph_lowlatency-f35b5b227845cc0e)
[INFO] [stdout] 
[INFO] [stdout] running 18 tests
[INFO] [stdout] test calculation::arbitrage::tests::test_buy_opportunity_not_profitable ... ok
[INFO] [stdout] test calculation::arbitrage::tests::test_same_exchange_no_opportunity ... ok
[INFO] [stdout] test calculation::fees::tests::test_exchange_fee_differences ... ok
[INFO] [stdout] test calculation::fees::tests::test_fee_calculation ... ok
[INFO] [stdout] test calculation::fees::tests::test_min_break_even_spread_bps_for_routes ... ok
[INFO] [stdout] test calculation::fees::tests::test_ten_dollar_route_estimate ... ok
[INFO] [stdout] test orderbook::book::test::test_add_exchange_price_level_bid ... ok
[INFO] [stdout] test orderbook::book::test::test_add_exchange_price_level_ask ... ok
[INFO] [stdout] test orderbook::book::test::test_add_exchange_price_level_concurrent ... ok
[INFO] [stdout] test orderbook::book::test::test_add_exchange_price_level_different_exchanges ... ok
[INFO] [stdout] test orderbook::book::test::test_add_exchange_price_level_quantity_accumulation ... ok
[INFO] [stdout] test util::tests::test_parse_price_cents ... ok
[INFO] [stdout] test util::tests::test_parse_quantity_smallest_unit ... ok
[INFO] [stdout] test test::test_full_run ... ok
[INFO] [stdout] test calculation::arbitrage::tests::test_profit_threshold_filtering ... ok
[INFO] [stdout] test calculation::arbitrage::tests::test_buy_opportunity_insufficient_liquidity ... ok
[INFO] [stdout] test calculation::arbitrage::tests::test_buy_opportunity_profitable ... FAILED
[INFO] [stdout] test calculation::arbitrage::tests::test_sell_opportunity_profitable ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- calculation::arbitrage::tests::test_buy_opportunity_profitable stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'calculation::arbitrage::tests::test_buy_opportunity_profitable' (19) panicked at src/calculation/arbitrage.rs:272:9:
[INFO] [stdout] assertion failed: opportunity.is_some()
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e7ae160413a - std[f92b4c606f291077]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e7ae160413a - std[f92b4c606f291077]::backtrace_rs::backtrace::trace_unsynchronized::<std[f92b4c606f291077]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e7ae160413a - std[f92b4c606f291077]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e7ae160413a - <<std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[786f478f706679df]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e7ae161808a - <core[786f478f706679df]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e7ae161808a - core[786f478f706679df]::fmt::write
[INFO] [stdout]    6:     0x5e7ae1608ae2 - std[f92b4c606f291077]::io::default_write_fmt::<alloc[64763625b5a07cdb]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e7ae1608ae2 - <alloc[64763625b5a07cdb]::vec::Vec<u8> as std[f92b4c606f291077]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e7ae15e2eef - <std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e7ae15e2eef - std[f92b4c606f291077]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e7ae15fc4a9 - std[f92b4c606f291077]::panicking::default_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e7ae14fee8c - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   12:     0x5e7ae14fee8c - test[20e1f0ae6cad7a17]::test_main_with_exit_callback::<test[20e1f0ae6cad7a17]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e7ae15fc722 - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   14:     0x5e7ae15fc722 - std[f92b4c606f291077]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e7ae15e2fda - std[f92b4c606f291077]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:691:13
[INFO] [stdout]   16:     0x5e7ae15da949 - std[f92b4c606f291077]::sys::backtrace::__rust_end_short_backtrace::<std[f92b4c606f291077]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e7ae15e3cbd - __rustc[8241495c18a89d70]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e7ae161884c - core[786f478f706679df]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e7ae1618812 - core[786f478f706679df]::panicking::panic
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:150:5
[INFO] [stdout]   20:     0x5e7ae14e21a6 - security_flamegraph_lowlatency[7204329d3339e358]::calculation::arbitrage::tests::test_buy_opportunity_profitable
[INFO] [stdout]                                at /opt/rustwide/workdir/src/calculation/arbitrage.rs:272:9
[INFO] [stdout]   21:     0x5e7ae14dea97 - security_flamegraph_lowlatency[7204329d3339e358]::calculation::arbitrage::tests::test_buy_opportunity_profitable::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/calculation/arbitrage.rs:261:41
[INFO] [stdout]   22:     0x5e7ae14cf636 - <security_flamegraph_lowlatency[7204329d3339e358]::calculation::arbitrage::tests::test_buy_opportunity_profitable::{closure#0} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x5e7ae14f2f6b - <fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5e7ae14f2f6b - test[20e1f0ae6cad7a17]::__rust_begin_short_backtrace::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:663:18
[INFO] [stderr] error: test failed, to rerun pass `--bin security_flamegraph_lowlatency`
[INFO] [stdout]   25:     0x5e7ae14ff95b - test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:74
[INFO] [stdout]   26:     0x5e7ae14ff95b - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   27:     0x5e7ae14ff95b - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   28:     0x5e7ae14ff95b - std[f92b4c606f291077]::panicking::catch_unwind::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   29:     0x5e7ae14ff95b - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   30:     0x5e7ae14ff95b - test[20e1f0ae6cad7a17]::run_test_in_process
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:27
[INFO] [stdout]   31:     0x5e7ae14ff95b - test[20e1f0ae6cad7a17]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:607:43
[INFO] [stdout]   32:     0x5e7ae14fb074 - test[20e1f0ae6cad7a17]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:637:41
[INFO] [stdout]   33:     0x5e7ae14fb074 - std[f92b4c606f291077]::sys::backtrace::__rust_begin_short_backtrace::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   34:     0x5e7ae1502562 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   35:     0x5e7ae1502562 - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   36:     0x5e7ae1502562 - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   37:     0x5e7ae1502562 - std[f92b4c606f291077]::panicking::catch_unwind::<(), core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   38:     0x5e7ae1502562 - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   39:     0x5e7ae1502562 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   40:     0x5e7ae1502562 - <std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x5e7ae1603a0f - <alloc[64763625b5a07cdb]::boxed::Box<dyn core[786f478f706679df]::ops::function::FnOnce<(), Output = ()> + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2240:9
[INFO] [stdout]   42:     0x5e7ae1603a0f - <std[f92b4c606f291077]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   43:     0x7cbe27fe3aa4 - <unknown>
[INFO] [stdout]   44:     0x7cbe28070a64 - clone
[INFO] [stdout]   45:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- calculation::arbitrage::tests::test_sell_opportunity_profitable stdout ----
[INFO] [stdout] Checking sell opportunity: our_ask_price=5000000, best_bid_price=5010000, best_bid_quantity=2000000, our_exchange=Binance, best_bid_exchange=Coinbase
[INFO] [stdout] 
[INFO] [stdout] thread 'calculation::arbitrage::tests::test_sell_opportunity_profitable' (22) panicked at src/calculation/arbitrage.rs:322:9:
[INFO] [stdout] assertion failed: opportunity.is_some()
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5e7ae160413a - std[f92b4c606f291077]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5e7ae160413a - std[f92b4c606f291077]::backtrace_rs::backtrace::trace_unsynchronized::<std[f92b4c606f291077]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5e7ae160413a - std[f92b4c606f291077]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5e7ae160413a - <<std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[786f478f706679df]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5e7ae161808a - <core[786f478f706679df]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5e7ae161808a - core[786f478f706679df]::fmt::write
[INFO] [stdout]    6:     0x5e7ae1608ae2 - std[f92b4c606f291077]::io::default_write_fmt::<alloc[64763625b5a07cdb]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5e7ae1608ae2 - <alloc[64763625b5a07cdb]::vec::Vec<u8> as std[f92b4c606f291077]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5e7ae15e2eef - <std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5e7ae15e2eef - std[f92b4c606f291077]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5e7ae15fc4a9 - std[f92b4c606f291077]::panicking::default_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5e7ae14fee8c - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   12:     0x5e7ae14fee8c - test[20e1f0ae6cad7a17]::test_main_with_exit_callback::<test[20e1f0ae6cad7a17]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5e7ae15fc722 - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   14:     0x5e7ae15fc722 - std[f92b4c606f291077]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5e7ae15e2fda - std[f92b4c606f291077]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:691:13
[INFO] [stdout]   16:     0x5e7ae15da949 - std[f92b4c606f291077]::sys::backtrace::__rust_end_short_backtrace::<std[f92b4c606f291077]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5e7ae15e3cbd - __rustc[8241495c18a89d70]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5e7ae161884c - core[786f478f706679df]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5e7ae1618812 - core[786f478f706679df]::panicking::panic
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:150:5
[INFO] [stdout]   20:     0x5e7ae14e2456 - security_flamegraph_lowlatency[7204329d3339e358]::calculation::arbitrage::tests::test_sell_opportunity_profitable
[INFO] [stdout]                                at /opt/rustwide/workdir/src/calculation/arbitrage.rs:322:9
[INFO] [stdout]   21:     0x5e7ae14deaf7 - security_flamegraph_lowlatency[7204329d3339e358]::calculation::arbitrage::tests::test_sell_opportunity_profitable::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/calculation/arbitrage.rs:311:42
[INFO] [stdout]   22:     0x5e7ae14cf6b6 - <security_flamegraph_lowlatency[7204329d3339e358]::calculation::arbitrage::tests::test_sell_opportunity_profitable::{closure#0} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x5e7ae14f2f6b - <fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5e7ae14f2f6b - test[20e1f0ae6cad7a17]::__rust_begin_short_backtrace::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:663:18
[INFO] [stdout]   25:     0x5e7ae14ff95b - test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:74
[INFO] [stdout]   26:     0x5e7ae14ff95b - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   27:     0x5e7ae14ff95b - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   28:     0x5e7ae14ff95b - std[f92b4c606f291077]::panicking::catch_unwind::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   29:     0x5e7ae14ff95b - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   30:     0x5e7ae14ff95b - test[20e1f0ae6cad7a17]::run_test_in_process
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:27
[INFO] [stdout]   31:     0x5e7ae14ff95b - test[20e1f0ae6cad7a17]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:607:43
[INFO] [stdout]   32:     0x5e7ae14fb074 - test[20e1f0ae6cad7a17]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:637:41
[INFO] [stdout]   33:     0x5e7ae14fb074 - std[f92b4c606f291077]::sys::backtrace::__rust_begin_short_backtrace::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   34:     0x5e7ae1502562 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   35:     0x5e7ae1502562 - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   36:     0x5e7ae1502562 - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   37:     0x5e7ae1502562 - std[f92b4c606f291077]::panicking::catch_unwind::<(), core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   38:     0x5e7ae1502562 - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   39:     0x5e7ae1502562 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   40:     0x5e7ae1502562 - <std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x5e7ae1603a0f - <alloc[64763625b5a07cdb]::boxed::Box<dyn core[786f478f706679df]::ops::function::FnOnce<(), Output = ()> + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2240:9
[INFO] [stdout]   42:     0x5e7ae1603a0f - <std[f92b4c606f291077]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   43:     0x7cbe27fe3aa4 - <unknown>
[INFO] [stdout]   44:     0x7cbe28070a64 - clone
[INFO] [stdout]   45:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     calculation::arbitrage::tests::test_buy_opportunity_profitable
[INFO] [stdout]     calculation::arbitrage::tests::test_sell_opportunity_profitable
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 16 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "eee3f1eecd2d27b990f2b8867a65e4aa1c735fc3331e2ce6ccce4a45e81eecbd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "eee3f1eecd2d27b990f2b8867a65e4aa1c735fc3331e2ce6ccce4a45e81eecbd", kill_on_drop: false }`
[INFO] [stdout] eee3f1eecd2d27b990f2b8867a65e4aa1c735fc3331e2ce6ccce4a45e81eecbd
